package utils

import (
	"os"

	"github.com/sirupsen/logrus"
)

var logger *logrus.Logger

// 初始化日志器
func init() {
	logger = logrus.New()
	logger.SetOutput(os.Stdout)
	logger.SetFormatter(&logrus.TextFormatter{
		FullTimestamp:   true,
		TimestampFormat: "2006-01-02 15:04:05",
	})

	// 默认设置为Info级别，可以通过环境变量JLPAY_LOG_LEVEL调整
	logLevel := os.Getenv("JLPAY_LOG_LEVEL")
	switch logLevel {
	case "debug":
		logger.SetLevel(logrus.DebugLevel)
	case "info":
		logger.SetLevel(logrus.InfoLevel)
	case "warn":
		logger.SetLevel(logrus.WarnLevel)
	case "error":
		logger.SetLevel(logrus.ErrorLevel)
	default:
		logger.SetLevel(logrus.InfoLevel)
	}
}

// GetLogger 获取日志器实例
func GetLogger() *logrus.Logger {
	return logger
}

// Debug 记录调试级别日志
func Debug(args ...interface{}) {
	logger.Debug(args...)
}

// Debugf 记录格式化调试级别日志
func Debugf(format string, args ...interface{}) {
	logger.Debugf(format, args...)
}

// Info 记录信息级别日志
func Info(args ...interface{}) {
	logger.Info(args...)
}

// Infof 记录格式化信息级别日志
func Infof(format string, args ...interface{}) {
	logger.Infof(format, args...)
}

// Warn 记录警告级别日志
func Warn(args ...interface{}) {
	logger.Warn(args...)
}

// Warnf 记录格式化警告级别日志
func Warnf(format string, args ...interface{}) {
	logger.Warnf(format, args...)
}

// Error 记录错误级别日志
func Error(args ...interface{}) {
	logger.Error(args...)
}

// Errorf 记录格式化错误级别日志
func Errorf(format string, args ...interface{}) {
	logger.Errorf(format, args...)
}

// WithField 添加字段到日志
func WithField(key string, value interface{}) *logrus.Entry {
	return logger.WithField(key, value)
}

// WithFields 添加多个字段到日志
func WithFields(fields logrus.Fields) *logrus.Entry {
	return logger.WithFields(fields)
}

// SetLogLevel 动态设置日志级别
func SetLogLevel(level string) {
	switch level {
	case "debug":
		logger.SetLevel(logrus.DebugLevel)
	case "info":
		logger.SetLevel(logrus.InfoLevel)
	case "warn":
		logger.SetLevel(logrus.WarnLevel)
	case "error":
		logger.SetLevel(logrus.ErrorLevel)
	default:
		logger.SetLevel(logrus.InfoLevel)
	}
}
